import numpy as np
import matplotlib.pyplot as plt


def sep(label=''):
    print('-' * 32, label, '-' * 32, sep='')


# 1.	对以下数据进行处理，了解逻辑回归特性
# (1)	数据创建
# ①	[1, 1, 0], [1, 2, 0], [0, 0, 1], [-1, 0, 1] 将数据进行存储（10分）
data = np.array([[1, 1, 0], [1, 2, 0], [0, 0, 1], [-1, 0, 1]])

# ②	数据最后一个数值为y，其余数值为x（10分）
x = data[:, :-1]
y = data[:, -1]
plt.scatter(x[:, 0], x[:, 1], c=y)
for i, item in enumerate(x):
    plt.annotate(f'#{i+1}', xy=(item[0], item[1]))

# (2)	模型创建
# ①	创建逻辑回归（10分）
# ②	设置正则化系数为0.8（10分）
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(penalty='l2',
                           C=0.8,
                           solver='liblinear')

# ③	拟合数据（10分）
model.fit(x, y)

# ④	打印预测结果（10分）
sep('打印预测结果')
h = model.predict(x)
print(h)

# ⑤	打印预测结果（10分）
sep('打印预测结果')
h = model.predict(x)
print(h)

# ⑥	打印截距（10分）
sep('打印截距')
print(model.intercept_)

# ⑦	打印权重（10分）
sep('打印权重')
print(model.coef_)

# ⑧	说明逻辑回归概率和边界线之间的关系（10分）
# 如下图，离边界将类别分开；离边界线约远，逻辑回归概率越大。
plt_x = np.array([x[:, 0].min(), x[:, 0].max()])
plt_y = - (model.intercept_ + model.coef_[0][0] * plt_x) / model.coef_[0][1]
plt.plot(plt_x, plt_y, 'r--')

# finally show all drawings
plt.show()
